lst-series-dict-demo、lst-array-to-dataframe 与 lst-set-index,创建带标签Series/DataFrame。NumPy数组在数据分析中存在三个关键限制:
Pandas通过 Series 和 DataFrame 完美解决了这些问题。
| 特性 | Series | DataFrame |
|---|---|---|
| 维度 | 一维 | 二维 |
| 类比 | 带标签的数组 | 带标签的表格 |
| 索引 | 必须有索引 | 行索引 + 列名 |
| 金融应用 | 单只股票价格序列 | 多只股票多指标数据表 |
Series是Pandas的 一维数据结构,可以理解为「带标签的数组」。
Series 1 (从列表创建):
0 10
1 20
2 30
3 40
4 50
dtype: int64
DataFrame是Pandas的 二维数据结构,类似于Excel表格。
DataFrame内容:
股票代码 股票名称 股价 涨跌幅
0 600519.SH 贵州茅台 1850.0 0.05
1 000858.SZ 五粮液 220.5 -0.02
2 600036.SH 招商银行 45.2 0.03
DataFrame形状: (3, 4)
列名列表: ['股票代码', '股票名称', '股价', '涨跌幅']
shape 返回 (行数, 列数)columns 获取所有列名从NumPy数组创建的DataFrame:
特征1 特征2 特征3
样本1 -0.176680 0.777577 -0.159483
样本2 -0.096581 0.078718 1.605183
样本3 -0.704786 -1.944902 -0.645645
样本4 0.440582 0.351067 1.121835
样本5 -3.000069 -0.359660 0.005483
columns 和 index 参数添加有意义的标签从列表的列表创建的DataFrame:
名称 价格 涨跌幅
0 贵州茅台 1850.0 0.05
1 五粮液 220.5 -0.02
2 招商银行 45.2 0.03
带日期索引的DataFrame:
价格 销量
2024-01-01 10 100
2024-01-02 20 200
2024-01-03 30 150
2024-01-04 40 300
2024-01-05 50 250
pd.date_range() 生成日期序列set_index() 将日期设置为行索引设置日期索引后,可以更方便地进行时间序列操作:
df.loc['2024-01-01']:获取特定日期的数据df.loc['2024-01-01':'2024-01-03']:获取日期范围内的数据比使用整数位置(iloc)更直观、更不容易出错。
| 创建方式 | 适用场景 |
|---|---|
| 列表 → Series | 简单一维数值数据 |
| 字典 → Series | 有标签的键值对数据 |
| 字典 → DataFrame | 列数据组织形式 |
| 数组 → DataFrame | 科学计算/建模结果 |
| 嵌套列表 → DataFrame | CSV/API获取的行数据 |
value_guotai、date、series_guotai、data 的业务含义、数据类型或取值范围,并判断哪一个输入最可能改变结果。array_3fund 的结果;同时写出方向、数量级或表格/图形结构。# ⚠️ 平台原始代码 - 请原样输入至教学平台(注释除外),平台才会判定答案正确
#任务一
import numpy as np
import pandas as pd # 导入Pandas数据分析库
value_guotai = np.array([1.5284,1.4596,1.3745,1.4034,1.3935,1.39,1.412,1.4164]) #国泰金鑫股票基金2024年8月1日至8日净值数据的数组
date = np.array(["2024-08-01","2024-08-02","2024-08-05","2024-08-06","2024-08-07","2024-08-08","2024-08-09","2024-08-12"]) #交易日数组
series_guotai = pd.Series(data=value_guotai,index=date) #创建序列
print(type(series_guotai)) #查看变量的数据结构
data=[1.4596,1.001,0.897,2.051,1.7385];index=["国泰金鑫","中海医疗","华夏优势","富国城镇","上投摩根"] #创建8月2日基金净值的数组
value_0403 = pd.Series(data,index) # 创建Series序列value_0403
print(type(value_0403)) # 输出数据类型
#任务二
import numpy as np
import pandas as pd # 导入Pandas数据分析库
date = np.array(["2024-08-01","2024-08-02","2024-08-05","2024-08-06","2024-08-07","2024-08-08","2024-08-09","2024-08-12"]) #交易日数组
name = np.array(["国泰金鑫","中海医疗","华夏优势","富国城镇","上投摩根"]) #基金名称的数组并且用基金简称
data_3fund_array = np.array([[1.01,0.8918,2.038],[0.995,0.8833,2.025],[1.002,0.8735,2.032]]) #3只基金在2024年8月8日至12日净值的数组
data_3fund = pd.DataFrame(data=data_3fund_array,index=date[5:],columns=name[1:4]) #转成一个数据框
print(type(data_3fund)) # 输出数据类型
#任务三
import numpy as np
import pandas as pd # 导入Pandas数据分析库
date = np.array(["2024-08-01","2024-08-02","2024-08-05","2024-08-06","2024-08-07","2024-08-08","2024-08-09","2024-08-12"]) #交易日数组
name = np.array(["国泰金鑫","中海医疗","华夏优势","富国城镇","上投摩根"]) # 创建NumPy数组name
# 创建NumPy数组value_total
value_total = np.array([[1.5284,0.991,0.9122,2.069,1.7742],[1.4596,1.001,0.897,2.051,1.7385],[1.3745,1,0.8786,2.023,1.6843],[1.4034,1.013,0.8944,2.027,1.6917],
[1.3935,1.007,0.8944,2.031,1.6957],[1.39,1.01,0.8918,2.038,1.6955],[1.412,0.995,0.8833,2.025,1.6938],[1.6938,1.002,0.8735,2.032,1.6899]]) #创建数组
data_total = pd.DataFrame(data=value_total,index=date,columns=name) #转为数据框
print(data_total) # 输出数据数据
#任务四
import numpy as np
import pandas as pd # 导入Pandas数据分析库
value_guotai = np.array([1.5284,1.4596,1.3745,1.4034,1.3935,1.39,1.412,1.4164]) #国泰金鑫股票基金2024年8月1日至8日净值数据的数组
date = np.array(["2024-08-01","2024-08-02","2024-08-05","2024-08-06","2024-08-07","2024-08-08","2024-08-09","2024-08-12"]) #交易日数组
series_guotai = pd.Series(data=value_guotai,index=date) # 创建Series序列series_guotai
data=[1.4596,1.001,0.897,2.051,1.7385];index=["国泰金鑫","中海医疗","华夏优势","富国城镇","上投摩根"] #创建8月2日基金净值的数组
value_0403 = pd.Series(data,index) # 创建Series序列value_0403
name = np.array(["国泰金鑫","中海医疗","华夏优势","富国城镇","上投摩根"]) #基金名称的数组并且用基金简称
data_3fund_array = np.array([[1.01,0.8918,2.038],[0.995,0.8833,2.025],[1.002,0.8735,2.032]])#3只基金在2024年8月8日至12日净值的数组
data_3fund = pd.DataFrame(data=data_3fund_array,index=date[5:],columns=name[1:4]) # 创建数据框data_3fund
list_guotai = list(series_guotai)#国泰金鑫8与1日到12日净值数据的序列转为列表
array_0403 = np.array(value_0403) #8月2日5只基金净值的序列转为数组
array_3fund = data_3fund.values #8月8日到12日3只基金净值的数据框变为数组
print(array_3fund) # 输出基金数据运行后核对:核对 value_guotai、date、series_guotai、data 是否按预测参与运算,实际输出是否与预测一致;若不一致,先检查类型、单位、索引/字段和运算顺序。
拓展练习:把输入表替换为本地中国上市公司数据的同结构子集;指出必须保持的字段、数据类型和质量检查。
lst-series-dict-demo、lst-array-to-dataframe 与 lst-set-index,创建带标签Series/DataFrame。date:str, code:str, close:float;日期唯一且按升序。import pandas as pd # 导入表格工具以构造、对齐和核对数据
raw={'date':['2025-01-02','2025-01-03'],'code':['600018.SH']*2,'close':[5.8,5.9]} # 声明建表所需日期、代码与收盘价字段
frame=pd.DataFrame(raw) # 声明建表所需日期、代码与收盘价字段
frame['date']=pd.to_datetime(frame['date']) # 构造带业务字段的数据框输入
frame=frame.set_index('date').sort_index() # 构造带业务字段的数据框输入
close=frame['close'] # 构造带业务字段的数据框输入
assert isinstance(close,pd.Series) and frame.index.is_monotonic_increasing # 构造带业务字段的数据框输入
assert not frame.index.has_duplicates and close.dtype.kind=='f' # 构造带业务字段的数据框输入
print(frame,frame.dtypes) # 构造带业务字段的数据框输入frame.to_dict('list') 与原输入逐字段核对。[商业大数据分析与应用]